package com.manor.main.dialog;

import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;

import androidx.annotation.NonNull;

import com.ishumei.sdk.captcha.SmCaptchaWebView;

import com.manor.common.CommonAppContext;
import com.manor.common.dialog.AbsDialogFragment;
import com.manor.common.utils.DpUtil;
import com.manor.common.utils.ToastUtil;
import com.manor.main.R;


public class CaptchaDialogFragment extends AbsDialogFragment {

    private SmCaptchaWebView smCaptchaWebView;


    @Override
    public void onAttach(@NonNull Context context) {
        this.mContext = context;
        super.onAttach(context);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.dialog_main_captcha;
    }

    @Override
    protected int getDialogStyle() {
        return R.style.dialog_sd;
    }

    @Override
    protected boolean canCancel() {
        return true;
    }

    @Override
    protected void setWindowAttributes(Window window) {
        WindowManager.LayoutParams attributes = window.getAttributes();
        attributes.gravity = Gravity.CENTER;
        attributes.width = WindowManager.LayoutParams.MATCH_PARENT;
        attributes.height = WindowManager.LayoutParams.WRAP_CONTENT;
        attributes.horizontalMargin = DpUtil.dp2px(15);
        window.setAttributes(attributes);
    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        LinearLayout llParent = (LinearLayout) findViewById(R.id.ll_container);
        // 定义结果回调方法
        SmCaptchaWebView.ResultListener listener = new SmCaptchaWebView.ResultListener() {
            // 验证码图片加载成功回调函数
            @Override
            public void onReady() {

            }

            // 处理过程出现异常回调函数
            @Override
            public void onError(int code) {
                ToastUtil.show("验证码失败");
            }

            // 滑动结束回调函数，滑动验证未通过pass为false，滑动验证通过pass为true。
            @Override
            public void onSuccess(CharSequence rid, boolean pass) {
                if (onCaptchaSuccessListener != null) {
                    onCaptchaSuccessListener.onCaptchaSuccessListener(rid, pass);
                }
            }
        };

        // 初始化
        smCaptchaWebView = new SmCaptchaWebView(mContext);
        smCaptchaWebView.setBackgroundColor(0);
        // 验证码 View 推荐宽高比为 3:2
        int width = getResources().getDisplayMetrics().widthPixels - DpUtil.dp2px(20);
        int height = (int) (width * 2f / 3);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width, height);
        layoutParams.gravity = Gravity.CENTER;
        smCaptchaWebView.setLayoutParams(layoutParams);

        SmCaptchaWebView.SmOption option = new SmCaptchaWebView.SmOption();
        // （必填项） todo: 替换成自己的organization
        option.setOrganization(CommonAppContext.SM_ORGANIZATION);
        // （必填项）todo: 与后台管理页面保持一致，可直接使用 default
        option.setAppId(CommonAppContext.SM_APPID);
        // （选填项）选择验证模式，支持以下模式
        //      1. SmCaptchaWebView.MODE_SLIDE          滑动式（默认）
        //      2. SmCaptchaWebView.MODE_SELECT         文字点选式
        //      3. SmCaptchaWebView.MODE_ICON_SELECT    图标点选式
        //      4. SmCaptchaWebView.MODE_SEQ_SELECT     语序点选
        //      5. SmCaptchaWebView.MODE_SPATIAL_SELECT 空间逻辑推理
        option.setMode(SmCaptchaWebView.MODE_SELECT);
        // （选填项）渠道标识
        option.setChannel("default");
        // （选填项）数美反欺诈 SDK 获取到的设备标识，如果有数美标识就填入，没有则删除
        //  option.setDeviceId("YOUR-smsdk-DEVICE-ID");
        // （选填项）自定义提示文字，仅滑动式支持
        //        if (!TextUtils.isEmpty(tip)) {
        //            option.setTipMessage(tip);
        //        }
        // （选填项）连接新加坡机房特殊配置项，仅供验证码数据上报新加坡机房客户使用
        // option.setCdnHost("castatic-xjp.fengkongcloud.com");
        // option.setHost("captcha-xjp.fengkongcloud.com");
        // （选填项）连接美国机房特殊配置项，仅供验证码数据上报美国机房客户使用
        //option.setCdnHost("castatic-fjny.fengkongcloud.com");
        //option.setHost("captcha-fjny.fengkongcloud.com");

        // （选填项）选择使用 https 网络协议，默认使用 http
        // option.setHttps(httpsRg.getCheckedRadioButtonId() == R.id.rb_https);

        int code = smCaptchaWebView.initWithOption(option, listener);
        if (SmCaptchaWebView.SMCAPTCHA_SUCCESS != code) {
            // logTv.setText("init failed:" + code);
        }
        // 放到容器中
        llParent.removeAllViews();
        llParent.addView(smCaptchaWebView);
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        if (smCaptchaWebView != null) {
            smCaptchaWebView = null;
        }
    }

    OnCaptchaSuccess onCaptchaSuccessListener;

    public void setOnCaptchaSuccessListener(OnCaptchaSuccess listener) {
        this.onCaptchaSuccessListener = listener;
    }

    public interface OnCaptchaSuccess {
        void onCaptchaSuccessListener(CharSequence rid, boolean pass);
    }
}
